# 新建“exerc3”Python文件完成作业，编写一个用户注册小程序，要求用户在控制台输入“ID”、“EMAIL地址”、“身份证号”、“姓名”。要求：
# ID长度不能超过8位，且只能由数字、字母、下划线组成
# EMAIL地址要求符合基本电子邮件格式
# 身份证号要求符合基本格式
# 姓名只能中文且不能超过4位
# 以上操作均不能用正则表达式
# def check_id(user_id):
#     if len(user_id)>8 or len(user_id)<1:
#         #print("超出长度限制")
#         return False
#     for char in user_id:
#         if not (char.isalnum() or char == '_'):
#             #print("出现违法字符")
#             return False
#     return True
# def check_email(email):
#     if '@' not in email:
#         return False
#     parts = email.split('@')#将part定义为@符号
#     if len(parts) != 2 or not parts[0] or not parts[1]:#指@前后必须有内容
#         return False
#     if '.' not in parts[1]:
#         return False
#     if parts[1].index('.') == 0:
#         return False
#     return True
# def check_bodyid(id_card):
#     if len(id_card) != 18:
#         #print("超出长度限制")
#         return False
#     for i in range(17):
#         if not id_card[i].isdigit():
#             #print("前17位有非数字字符")
#             return False
#     last_char = id_card[-1]
#     if not (last_char.isdigit() or last_char.upper() == 'X'):
#         #print("最后一位有非法字符")
#         return False
#     return True
# def check_name(name):
#     if len(name) > 4:
#         #print("超出长度限制")
#         return False
#     for char in name:
#         if not ('\u4e00' <= char <= '\u9fff'):
#             #print("出现非汉字字符")
#             return False
#     return True
#
# def main():
#     #验证id格式
#     while True:
#         id = input("请输入用户id(要求ID长度不能超过8位，且只能由数字、字母、下划线组成):")
#         if check_id(id):
#             break
#         print("id格式错误，请重新输入！")
#     #验证电子邮箱
#     while True:
#         email = input("请输入电子邮箱(要求EMAIL地址要求符合基本电子邮件格式):")
#         if check_email(email):
#             break
#         print("邮箱格式错误，请重新输入！")
#     #验证身份证号
#     while True:
#         bodyid = input("请输入身份证号(要求符合基本格式):")
#         if check_bodyid(bodyid):
#             break
#         print("身份证号格式错误，请重新输入！")
#     #验证姓名
#     while True:
#         name = input("请输入姓名(要求姓名只能中文且不能超过4位):")
#         if check_bodyid(bodyid):
#             break
#         print("姓名格式错误，请重新输入！")
#
#     # 注册成功
#     print("\n注册成功！以下是您的注册信息：")
#     print(f"ID: {id}")
#     print(f"EMAIL地址: {email}")
#     print(f"身份证号: {bodyid}")
#     print(f"姓名: {name}")
#
# if __name__ == "__main__":
#     main()
#改良版，可以反馈具体的错误信息
def check_id(user_id):
    """
    验证ID是否符合要求：
    1. 长度不超过8位
    2. 只能由数字、字母、下划线组成
    """
    if len(user_id) > 8 or len(user_id) < 1:
        return "ID长度必须在1到8位之间！"
    for char in user_id:
        if not (char.isalnum() or char == '_'):
            return "ID只能包含数字、字母和下划线！"
    return None  # 没有错误

def check_email(email):
    """
    验证EMAIL地址是否符合基本格式：
    1. 必须包含一个@符号
    2. @符号前后必须有内容
    3. 必须包含一个点号（.），且点号不能紧邻@符号
    """
    if '@' not in email:
        return "EMAIL地址必须包含@符号！"
    parts = email.split('@')
    if len(parts) != 2 or not parts[0] or not parts[1]:
        return "@符号前后必须有内容！"
    if '.' not in parts[1]:
        return "EMAIL地址必须包含点号（.）！"
    if parts[1].index('.') == 0:
        return "点号（.）不能紧邻@符号！"
    return None  # 没有错误

def check_bodyid(id_card):
    """
    验证身份证号是否符合基本格式：
    1. 长度必须为18位
    2. 前17位必须为数字，最后一位可以是数字或X
    """
    if len(id_card) != 18:
        return "身份证号长度必须为18位！"
    for i in range(17):
        if not id_card[i].isdigit():
            return "身份证号前17位必须为数字！"
    last_char = id_card[-1]
    if not (last_char.isdigit() or last_char.upper() == 'X'):
        return "身份证号最后一位必须是数字或X！"
    return None  # 没有错误

def check_name(name):
    """
    验证姓名是否符合要求：
    1. 只能包含中文
    2. 长度不能超过4位
    """
    if len(name) > 4:
        return "姓名长度不能超过4位！"
    for char in name:
        if not ('\u4e00' <= char <= '\u9fff'):
            return "姓名只能包含中文！"
    return None  # 没有错误

def main():
    print("欢迎使用用户注册小程序！")
    print("请按照提示输入以下信息：")

    # 输入ID
    while True:
        user_id = input("请输入用户ID（长度不能超过8位，且只能由数字、字母、下划线组成）：")
        error = check_id(user_id)
        if error is None:
            break
        print(f"ID输入错误：{error}")

    # 输入EMAIL地址
    while True:
        email = input("请输入电子邮箱（要求符合基本电子邮件格式）：")
        error = check_email(email)
        if error is None:
            break
        print(f"EMAIL地址输入错误：{error}")

    # 输入身份证号
    while True:
        bodyid = input("请输入身份证号（要求符合基本格式）：")
        error = check_bodyid(bodyid)
        if error is None:
            break
        print(f"身份证号输入错误：{error}")

    # 输入姓名
    while True:
        name = input("请输入姓名（只能中文且不能超过4位）：")
        error = check_name(name)
        if error is None:
            break
        print(f"姓名输入错误：{error}")

    # 注册成功
    print("\n注册成功！以下是您的注册信息：")
    print(f"ID: {user_id}")
    print(f"EMAIL地址: {email}")
    print(f"身份证号: {bodyid}")
    print(f"姓名: {name}")

if __name__ == "__main__":
    main()